import {Message} from 'element-ui';


export default function ({app, $axios, redirect, route, store}) {

  //console.log("axios执行了")
  //基本配置
  $axios.defaults.timeout = 60000;

  //请求拦截
  $axios.onRequest(config => {
    //请求头加上token
    if (store.state.user.token) {
      //console.log("请求头加上token")
      config.headers.Authorization = 'Bearer ' + store.state.user.token;
    }

    return config;
  })

  //响应拦截 刷新时才拦截
  $axios.onResponse(res => {
    //如果返回响应关带token就更新本地token
    if (res.headers.token) {
      console.log("axios发生有回来的新token于是更新")
      store.commit('user/M_UPDATE_USER_TOKEN', res.headers.token)//更新写入vuex
      app.$cookies.set('user', store.state.user)
    }
    //app.$cookies.set('user.token', res.headers.token)//写入cookie
    //store.commit('user/M_UPDATE_USER', {err: 0, msg: '登录成功', token: res.headers.token, })//写入vuex

    return res
  });

  // $axios.onError(error => {
  // })
  //错误处理
  $axios.onError(error => {

    if (error.response) {
      if(error.response.status == 403){
         return  Message.error('无权进行此操作！');
      }
      if (error.response.status === 401 && error.response.data.code === "no_token") {

        Message.error('请先登录后，再执行操作');
        // app.$cookies.removeAll();
        // store.commit('user/M_UPDATE_USER', {err: 1, msg: '退出登录', token: null, data: null})
        // redirect('/login');
        // return Promise.reject('认证过期，请重新登录');
      }
      if (error.response.status === 401 && error.response.data.code === "token_error") {
        Message.error('验证时发生错误，登录已过期');
        // Message({showClose: true, type: 'error', duration: 0, message: '认证不通过，请重新登录'});
        app.$cookies.removeAll();
        store.commit('user/M_UPDATE_USER', {err: 1, msg: '退出登录', token: null, data: null})
        // redirect('/login');
        // return Promise.reject('认证过期，请重新登录');
      } else if (error.response.status === 401 && error.response.data.code === "token_expired") {
        Message.error('验证时发生错误，登录已过期');
        // Message({showClose: true, type: 'error', duration: 0, message: '会话过期，请重新登录'});
        app.$cookies.removeAll();
        store.commit('user/M_UPDATE_USER', {err: 1, msg: '退出登录', token: null, data: null})
        redirect('/');
        // return Promise.reject('认证过期，请重新登录');
      } else if (error.response.status === 401) {
        Message.error("服务器认证失败！")
      }


    }

    //console.log(error)
    return error;
  })
  // $axios.interceptors.response.use(response => {
  //   if (response.status === 401) {
  //     return Message.error("请登录后再试")
  //   } else {
  //     return response.data
  //   }
  // })
}
